home *** CD-ROM | disk | FTP | other *** search
- /////////////////////////////////////////////////////////////
- // Flash Plugin and Player
- // Copyright (C) 1998 Olivier Debon
- //
- // This program is free software; you can redistribute it and/or
- // modify it under the terms of the GNU General Public License
- // as published by the Free Software Foundation; either version 2
- // of the License, or (at your option) any later version.
- //
- // This program is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- //
- // You should have received a copy of the GNU General Public License
- // along with this program; if not, write to the Free Software
- // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- //
- ///////////////////////////////////////////////////////////////
- #ifndef _PROGRAM_H_
- #define _PROGRAM_H_
-
- #include "amiga_specific.h"
-
- enum ControlType {
- ctrlPlaceObject,
- ctrlPlaceObject2,
- ctrlRemoveObject,
- ctrlRemoveObject2,
- ctrlDoAction,
- ctrlStartSound,
- ctrlStopSound,
- ctrlBackgroundColor
- };
-
- enum PlaceFlags {
- placeIsMove = 0x01,
- placeHasCharacter = 0x02,
- placeHasMatrix = 0x04,
- placeHasColorXform = 0x08,
- placeHasRatio = 0x10,
- placeHasName = 0x20,
- placeHasClip = 0x40
- };
-
- struct Control {
- ControlType type;
-
- // Place, Remove, Sound
- Character *character;
- long depth;
-
- // Place 1&2
- PlaceFlags flags;
- Matrix matrix;
- Cxform cxform;
- long ratio;
- long clipDepth;
- char *name;
-
- // BackgroundColor
- Color color;
-
- // DoAction
- ActionRecord *actionRecords;
-
- struct Control *next;
-
-
- // Methods
-
- void addActionRecord( ActionRecord *ar)
- {
- ar->next = 0;
-
- if (actionRecords == 0) {
- actionRecords = ar;
- } else {
- ActionRecord *current;
-
- for(current = actionRecords; current->next; current = current->next);
-
- current->next = ar;
- }
- };
-
- Control()
- {
- actionRecords = 0;
- cxform.aa = 1.0; cxform.ab = 0;
- cxform.ra = 1.0; cxform.rb = 0;
- cxform.ga = 1.0; cxform.gb = 0;
- cxform.ba = 1.0; cxform.bb = 0;
- ratio = 0;
- clipDepth = 0;
- name = 0;
- };
-
- ~Control()
- {
- ActionRecord *ar,*del;
- for(ar = actionRecords; ar;)
- {
- del = ar;
- ar = ar->next;
- delete del;
- }
- if (name) {
- free(name);
- }
- };
- };
-
- struct Frame {
- char *label;
- Control *controls; // Controls for this frame
- };
-
- enum MovieStatus {
- MoviePaused,
- MoviePlay
- };
-
- struct FlashMovie;
-
- struct Program {
- DisplayList *dl;
-
- Frame *frames; // Array
- long nbFrames; // Number of valid frames
- long currentFrame;
- long loadingFrame;
- long totalFrames; // Total expected number of frames
- long nextFrame;
- int movieWait; // If true freeze movie until next loaded frame
- MovieStatus movieStatus;
- Sound *currentSound;
- long settings;
- FlashMovie *movie;
- long render; // True if needed to be rendered
-
- Program(FlashMovie *movie,long n);
- ~Program();
-
- void rewindMovie();
- void pauseMovie();
- void continueMovie();
- void nextStepMovie();
- void gotoFrame(GraphicDevice *gd, long f);
-
- long processMovie(GraphicDevice *, SoundMixer *);
- long nestedMovie(GraphicDevice *, SoundMixer *, Matrix *, Cxform *);
- long runFrame(GraphicDevice *, SoundMixer *, long f, long action=1);
- long handleEvent(GraphicDevice *, SoundMixer *, FlashEvent *);
- long doAction(GraphicDevice *gd, ActionRecord *action, SoundMixer *);
- void setCurrentFrameLabel(char *label);
- void advanceFrame();
- void addControlInCurrentFrame(Control *ctrl);
- void setGetUrlMethod( void (*)(char *, char *, void *), void *);
- void modifySettings(long flags);
- long searchFrame(GraphicDevice *gd, char *, char *);
- void validateLoadingFrame();
- long getCurrentFrame();
- void setCurrentFrame(long);
-
- Frame *getFrames();
- long getNbFrames();
-
- DisplayList *getDisplayList();
-
- #ifdef DUMP
- void dump(BitStream *bs);
- static void dumpActions(BitStream *bs, ActionRecord *actions);
- #endif
- };
-
- DisplayListEntry *findFocus(DisplayList *dl);
- void setFlashTimer(struct myTimeval *tv, int time_ms);
- int checkFlashTimer(struct myTimeval *tv);
-
- void loadNewSwf(FlashMovie *movie, char *url, int level);
-
- void computeBBox(FlashMovie *movie, Rect *rect, DisplayListEntry *e);
-
- long processMovie(FlashMovie *movie);
-
- #endif /* _PROGRAM_H_ */
-